package mlz.work;

import java.util.Arrays;
import java.util.Scanner;

/*
## 需求3：评委打分
在唱歌比赛中，可能有多名评委要给选手打分，分数是[0-100]之间的整数。
选手最后得分为:去掉最高分、最低分后剩余分数的平均分，请编写程序能够录入多名评委的分数，并算出选手的最终得分

需求分析：
1.方法是否需要传入参数？
    需要,把评委的人数个数写成参数
2.方法是否需要返回值?
    需要,返回的就是平均分
3.方法内部的业务逻辑
    1.假设评委的人数个数为n个,那么就是需要n个评委的分数,
      所以需要定义一个长度为n的数组,用来存储每一位评委的分数
    2.循环n次,使用Scanner录入n个 [0-100]范围的内的整数,并且存入到数组中
    3.求数组中的元素的总和、最大值、最小值
    4.最后计算平均值： 平均值= (和-最大值-最小值) / （数组.length - 2）

*/
public class WorkDemo03 {
    public static void main(String[] args) {
        double score = getAvgScore(6);
        System.out.println(score);
    }

    public static double getAvgScore(int n){
        //1.假设评委的人数个数为n个,那么就是需要n个评委的分数,
        //  所以需要定义一个长度为n的数组,用来存储每一位评委的分数
        int[] scores = new int[n]; //[0,0,0,0,0,0]

        //2.循环n次,使用Scanner录入n个 [0-100]范围的内的整数,并且存入到数组中
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length; i++) {
            //i = 0 1 2 3 4 5
            System.out.println("请您录入第" + (i + 1) + "个评委的分数:");
            int score = sc.nextInt(); //90
            scores[i] = score;
            //System.out.println(Arrays.toString(scores));
        }

        //3.求数组中的元素的总和、最大值、最小值
        int sum = 0;//总和
        int max = scores[0];//最大值
        int min = scores[0];//最小值
        //遍历数组
        for (int i = 0; i < scores.length; i++) {
            //i = 0 1 2 3 4 5
            int score = scores[i];
            //求和
            sum += score;
            //求最大值
            if (score > max){
                max = score;
            }
            //求最小值
            if (score < min){
               min = score;
            }
        }

        //4.最后计算平均值： 平均值= (和-最大值-最小值) / （数组.length - 2）
//        double avg = (sum - max - min) / (n - 2);
//        return avg;

        return 1.0 * (sum - max - min) / (n - 2);
    }







}
